package linkedList.双指针;

import linkedList.BaseLinkedListTest;
import po.ListNode;

/**
 * @author songZiHao
 * @version 1.0.0
 * @ClassName 合并两个链表1669.java
 * @Description TODO https://leetcode-cn.com/problems/merge-in-between-linked-lists/
 * @createTime 2021年03月20日 10:36:00
 */
public class 合并两个链表1669 extends BaseLinkedListTest {
    /**
     * 给你两个链表 list1 和 list2 ，它们包含的元素分别为 n 个和 m 个。
     *
     * 请你将 list1 中下标从 a 到 b 的全部节点都删除，并将list2 接在被删除节点的位置。
     *
     *
     */
    public static ListNode mergeInBetween(ListNode list1, int a, int b, ListNode list2) {
        ListNode firstPoint = list1, secondPoint = list1, temp = list2;
        for (int i = 0; i < b; i++) {
            if (i < a) {
                firstPoint = firstPoint.next;
            }
            secondPoint = secondPoint.next;
        }
        //找到list2的尾部
        while (temp.next != null) {
            temp = temp.next;
        }
        //进行拼接，list2下个节点指向下标b位置的节点
        temp.next = secondPoint.next;
        //a位置节点的值替换
        firstPoint.val = list2.val;
        firstPoint.next = list2.next;
        return list1;
    }

    public static void main(String[] args) {
        mergeInBetween(createLinkedList(0,1,2),1,1,createLinkedList(1000000,1000001,1000002,1000003));
    }
}
